在 docker 上搭建 Go RESTful 服务

安装docker

我的环境是macOS,直接在官网下载安装包

我安装的是docker for macOS

创建docker image

创建docker 文件

新建我们的文件:

1
2
3
mkdir restful-go
cd restful-go
touch Dockerfile

编辑我们的文件:

1
vim Dockerfile

1
2
3
4
5
6
7
FROM golang:latest
RUN go get github.com/kelele67/gopher/goadult/simple-rest
CMD /go/bin/hellorest
EXPOSE 8080

创建docker镜像

运行 docker build -t simple-rest .

由于我们是新环境,所以第一步下载go语言环境会有点慢。

在Step 2的时候遇到问题

1
2
3
4
5
6
7
8
9
10
11
┌─(~/restful-go)───────────────────────────(kelele67@liuqideMacBook-Pro:s002)─┐
└─(10:49:02)──> docker build -t simple-rest . 128 ↵ ──(五, 616)─┘
Sending build context to Docker daemon 2.048 kB
Step 1/4 : FROM golang:latest
---> 41e7847de71b
Step 2/4 : RUN go get github.com/kelele67/gopher/goadult/simple-rest
---> Running in c927b5cf53ee
# cd /go/src/github.com/kelele67/gopher; git submodule update --init --recursive
No submodule mapping found in .gitmodules for path 'src/goji.io'
package github.com/kelele67/gopher/goadult/simple-rest: exit status 1
The command '/bin/sh -c go get github.com/kelele67/gopher/goadult/simple-rest' returned a non-zero code: 1

google 之后解决办法是

在自己git仓库中移除src/goji.io包(这是我们之后用到的一个包)

1
2
3
┌─(~/Desktop/gopher)───────────────────────(kelele67@liuqideMacBook-Pro:s000)─┐
└─(10:49:09 on master)──> git rm --cached src/goji.io ──(五, 616)─┘
rm 'src/goji.io'

最后别忘了更新你的git仓库

然后终于成功运行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
┌─(~/restful-go)───────────────────────────(kelele67@liuqideMacBook-Pro:s002)─┐
└─(10:49:51)──> docker build -t simple-rest . 1 ↵ ──(五, 616)─┘
Sending build context to Docker daemon 2.048 kB
Step 1/4 : FROM golang:latest
---> 41e7847de71b
Step 2/4 : RUN go get github.com/kelele67/gopher/goadult/simple-rest
---> Running in dd10a804e0a6
---> 659213d46869
Removing intermediate container dd10a804e0a6
Step 3/4 : CMD /go/bin/simple-rest
---> Running in 2a211ea63c14
---> 4946a3b22cc0
Removing intermediate container 2a211ea63c14
Step 4/4 : EXPOSE 8080
---> Running in 68bf32730290
---> af6476b6f2c6
Removing intermediate container 68bf32730290
Successfully built af6476b6f2c6

查看我们现在的镜像:

1
2
3
4
5
┌─(~/restful-go)───────────────────────────(kelele67@liuqideMacBook-Pro:s002)─┐
└─(11:08:01)──> docker images ──(五, 616)─┘
REPOSITORY TAG IMAGE ID CREATED SIZE
simple-rest latest af6476b6f2c6 2 minutes ago 709 MB
golang latest 41e7847de71b 6 days ago 699 MB

运行镜像

1
2
3
┌─(~/restful-go)───────────────────────────(kelele67@liuqideMacBook-Pro:s002)─┐
└─(11:10:35)──> docker run -d -p 8080:8080 simple-rest ──(五, 616)─┘
8911247792d4ce774738c492859bbd66911b1e0eeb2f6a76a6b5c7b3c768c12b

查看正在运行的镜像:

1
2
3
4
┌─(~/restful-go)───────────────────────────(kelele67@liuqideMacBook-Pro:s002)─┐
└─(11:11:13)──> docker ps ──(五, 616)─┘
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8911247792d4 simple-rest "/bin/sh -c /go/bi..." Less than a second ago Up 19 seconds 0.0.0.0:8080->8080/tcp relaxed_austin

测试镜像

1
2
3
┌─(~/restful-go)───────────────────────────(kelele67@liuqideMacBook-Pro:s002)─┐
└─(11:28:04)──> curl http://127.0.0.1:8080/hello ──(五, 616)─┘
Hello, Stranger%

1
2
3
┌─(~/restful-go)───────────────────────────(kelele67@liuqideMacBook-Pro:s002)─┐
└─(11:29:14)──> curl http://127.0.0.1:8080/hello\?name\=kelele67 ──(五, 616)─┘
Hello, kelele67%

参考

How To Run Go RESTful Service In Docker On Mac OS X